맨위로가기

대소문자 구분

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

대소문자 구분은 문자열을 처리하는 시스템, 애플리케이션, 프로그래밍 언어 등에서 대문자와 소문자를 동일하게 취급할지 여부를 의미한다. 검색, 사용자 이름, 비밀번호, 파일 이름, 변수 이름, URL 등 다양한 분야에서 대소문자 구분이 적용된다. 예를 들어, 검색 엔진은 기본적으로 대소문자를 구분하지 않지만, 데이터베이스에서는 대소문자 구분 여부가 다를 수 있다. 프로그래밍 언어는 변수 이름에 대해 대소문자를 구분하는 경우가 있고, 파일 시스템은 운영체제에 따라 대소문자 구분 방식이 다르다.

더 읽어볼만한 페이지

  • 대문자 사용 - 대소문자
    대소문자는 문자를 표기하는 방식으로, 타이포그래피, 언어, 프로그래밍 등 다양한 분야에서 활용되며, 가독성 향상, 강조, 문자열 변환 등에 사용된다.
  • 대문자 사용 - 작은 대문자
    작은 대문자는 텍스트 내 특정 요소 강조를 위해 사용되는 활자 스타일로, 출판, 언어학, 법률 문서, 컴퓨터 과학 등 다양한 분야에서 활용되며, 16세기 초부터 사용되어 OpenType 글꼴 표준과 유니코드에서도 지원된다.
대소문자 구분
'개요'
'정의''대소문자 구별은 대문자와 소문자를 구별하는 것을 의미한다.'
'영문 표기''case sensitivity'
'영문 표기 (반대)''case insensitivity'
'설명''컴퓨터 과학에서 대소문자 구별은 문자열을 비교할 때 대문자와 소문자를 다르게 취급하는 것을 의미한다. 따라서 "Foo"와 "foo"는 대소문자를 구별하는 문맥에서 두 개의 구별되는 문자열로 간주된다.'
'예시''사용자 이름, 파일 이름, 비밀번호, 검색 쿼리, 프로그래밍 언어의 식별자'
'사용'
'파일 시스템''일부 파일 시스템은 대소문자를 구별한다. 대부분의 유닉스 계열 시스템 (리눅스, macOS 포함, HFS+ 제외)은 대소문자를 구별한다. 반면, 마이크로소프트 윈도우NTFS를 통해 대소문자를 보존하지만, 기본적으로 대소문자를 구별하지 않는다. 즉, 파일 이름은 대소문자를 유지하지만, "MyFile.txt"와 "myfile.txt"는 동일한 파일을 참조한다.'
'프로그래밍 언어''대부분의 프로그래밍 언어는 변수 이름, 함수 이름, 키워드와 같은 식별자에서 대소문자를 구별한다. C, C++, 자바, 자바스크립트, 펄, 파이썬, 루비와 같은 언어가 이에 해당한다. 일부 오래된 언어 (예: 포트란, 베이직)는 대소문자를 구별하지 않는다.'
'데이터베이스''SQL 쿼리에서 대소문자 구별은 데이터베이스 시스템에 따라 다르다. 일부 시스템은 기본적으로 대소문자를 구별하고, 다른 시스템은 대소문자를 구별하지 않도록 구성할 수 있다. MySQL은 일반적으로 대소문자를 구별하지 않지만, 이 동작은 설정에 따라 변경할 수 있다.'
'검색 엔진''일반적으로 웹 검색 엔진은 검색 쿼리에서 대소문자를 구별하지 않는다. 그러나 일부 특수한 검색 도구나 특정 검색 옵션은 대소문자를 구별하는 검색을 지원할 수 있다.'
'장단점'
'장점''대소문자를 구별하면 더 많은 수의 고유한 식별자를 사용할 수 있다. 또한 코드나 데이터의 명확성을 높이는 데 도움이 될 수 있다.'
'단점''대소문자를 구별하는 시스템은 사용하기에 혼란스러울 수 있으며, 오류를 발생시키기 쉽다. 특히 사용자가 대소문자를 잘못 입력하거나, 시스템이 대소문자를 어떻게 처리하는지 모르는 경우 문제가 발생할 수 있다.'
'기타'
'정렬 규칙''대소문자 구별은 문자열의 정렬 순서 (collation)에도 영향을 미칠 수 있다. 대소문자를 구별하는 정렬 규칙은 대문자를 소문자와 다르게 정렬한다.'
'대소문자 보존''일부 시스템은 대소문자를 "보존"하지만, 대소문자를 "구별"하지는 않는다. 즉, 시스템은 사용자가 입력한 대소문자를 저장하지만, 비교 시에는 대소문자를 무시한다.'

2. 중요 분야

대소문자 구분은 컴퓨팅의 다양한 분야에서 중요한 고려 사항이다. 어떤 경우에는 대소문자를 구분하는 것이 정확성을 높이는 데 필수적이며, 다른 경우에는 사용 편의성을 위해 구분하지 않는 것이 더 유용할 수 있다. 주요 적용 분야는 다음과 같다.


  • 검색: 사용자의 검색 의도나 시스템 설정에 따라 대소문자를 구분하거나 구분하지 않을 수 있다. 예를 들어, 일반 단어 검색과 고유 명사 검색은 다른 접근 방식이 필요할 수 있다.[1][2] 상세한 내용은 #검색 섹션에서 다룬다.
  • 사용자 이름: 일반적으로 인증 시스템에서 사용자 편의를 위해 대소문자를 구분하지 않지만, 입력된 대소문자는 그대로 보존하는 경우가 많다. 상세한 내용은 #사용자 이름 섹션에서 다룬다.
  • 비밀번호: 보안 강화를 위해 대부분의 시스템에서 대소문자를 엄격하게 구분한다. 상세한 내용은 #비밀번호 섹션에서 다룬다.
  • 파일 이름: 사용하는 운영체제파일 시스템에 따라 대소문자 구분 정책이 다르다. 예를 들어, 유닉스 계열 시스템은 일반적으로 구분하지만, 마이크로소프트 윈도우는 구분하지 않는다 (단, 대소문자는 보존). 상세한 내용은 #파일 이름 섹션에서 다룬다.
  • 변수 이름: 프로그래밍 언어마다 대소문자 구분 정책이 다르다. C나 Java 등은 구분하지만, 파스칼이나 대부분의 BASIC 언어는 구분하지 않는다. 상세한 내용은 #변수 이름 섹션에서 다룬다.
  • URL: URL의 구성 요소에 따라 대소문자 구분 여부가 다르다. 예를 들어, 스키마와 호스트는 소문자로 통일되지만, 경로(path) 부분은 서버 설정에 따라 달라질 수 있다. 상세한 내용은 #URL 섹션에서 다룬다.

2. 1. 검색

사용자는 정보 검색 시스템에서 검색 대상의 성격에 따라 대소문자 구분을 적절히 처리하기를 기대한다. 예를 들어, 일반적인 단어 "dog"를 검색할 때는 문장의 시작이든 아니든 같은 단어로 인식하기를 원할 수 있다. 반면, 상표인명, 도시 이름 같은 고유 명사 "Jade"를 찾을 때는 광물 "jade"와 구분하여 관련 없는 결과를 걸러내고 싶어 할 수 있다.[1][2]

텍스트 검색 작업은 사용하는 시스템, 애플리케이션, 또는 검색하는 맥락에 따라 대소문자를 구분할 수도 있고 구분하지 않을 수도 있다. 많은 텍스트 편집기, 워드 프로세서, 웹 브라우저에서는 사용자가 직접 검색 시 대소문자를 구분할 것인지 선택하는 옵션을 제공한다.

2. 1. 1. 검색 엔진

텍스트를 검색할 때는 시스템이나 프로그램 또는 사용 맥락에 따라 대소문자를 구분할 수도 있고, 구분하지 않을 수도 있다. 사용자는 텍스트 편집기, 워드 프로세서, 웹 브라우저 등 많은 프로그램에서 검색 시 대소문자를 구분할지 여부를 직접 선택할 수 있다.

대소문자를 구분하지 않는 검색은 더 포괄적인 결과를 얻을 수 있다. 예를 들어, 문장 첫 글자로 쓰인 "Language", 일반적인 "language", 제목처럼 모두 대문자인 "LANGUAGE"를 모두 찾아낸다. 반면, 대소문자를 구분하는 검색은 프로그래밍 언어인 "BASIC"처럼 특정 단어만 정확히 찾고 싶을 때 유용하며, 해당 단어가 포함된 원하지 않는 결과는 대부분 제외할 수 있다.

예를 들어, 구글 검색 엔진은 기본적으로 대소문자를 구분하지 않으며, 사용자가 대소문자를 구분하여 검색하도록 설정하는 옵션은 제공하지 않는다.[20][7] 데이터베이스 시스템에서도 차이가 있다. 오라클 SQL에서는 대부분의 작업과 검색이 기본적으로 대소문자를 구분하지만,[21][8] 다른 대부분의 DBMS에서는 SQL 검색 시 기본적으로 대소문자를 구분하지 않는다.[22][9]

대소문자를 구분하지 않는 작업을 때때로 '''대소문자 접기'''(case folding)라고도 부르는데, 이는 문자 코드 테이블에서 대문자와 소문자를 같은 것으로 취급하여(접어서) 처리한다는 아이디어에서 유래했다.

2. 1. 2. 데이터베이스

오라클 SQL에서는 대부분의 작업과 검색이 기본적으로 대소문자를 구분한다.[21][8] 반면, 다른 대부분의 DBMS에서는 SQL 검색이 기본적으로 대소문자를 구분하지 않는다.[22][9]

2. 2. 사용자 이름

인증 시스템은 일반적으로 사용자 이름을 대소문자를 구분하지 않는다. 이는 사용자가 사용자 이름을 더 쉽게 기억하고 입력하는 복잡성을 줄이기 위함이다. 또한, 한 글자의 대소문자만 다른 두 개의 사용자 이름이 존재할 경우 발생할 수 있는 실수나 사칭의 가능성을 제거하는 효과도 있다.

그러나 많은 시스템은 사용자가 입력한 대소문자를 그대로 보존한다. 이는 기능적으로는 대소문자를 구분하지 않더라도, 사용자가 미적으로 보기 좋은 사용자 이름 조합을 선택하고 사용할 수 있도록 하기 위함이다.

2. 3. 비밀번호

인증 시스템은 일반적으로 비밀번호를 처리할 때 대소문자를 구분한다. 이를 통해 사용자는 더 복잡한 비밀번호를 설정할 수 있게 되어 보안 수준을 높일 수 있다.

2. 4. 파일 이름

전통적으로 유닉스 계열 운영 체제는 파일 이름을 대소문자를 구분하여 처리하는 반면, 마이크로소프트 윈도우는 대소문자를 구분하지 않지만 대부분의 파일 시스템에서는 대소문자 보존한다. 파일 시스템별 구체적인 처리 방식의 차이는 아래 문단에서 자세히 다룬다.

2. 4. 1. 파일 시스템

유닉스 계열 시스템의 파일 시스템에서 파일 이름은 일반적으로 대소문자를 구분한다 (동일한 디렉터리에 readme.txt와 Readme.txt 파일이 별도로 있을 수 있다). macOS는 기본적으로 대소문자를 구분하지 않는 (따라서 동일한 디렉터리에 readme.txt와 Readme.txt가 있을 수 없음) HFS Plus 및 APFS를 사용하지만, 기본적으로 대소문자 보존 모드(readme.txt로 생성된 파일은 readme.txt로 표시되고 Readme.txt로 생성된 파일은 Readme.txt로 표시됨)를 사용한다는 점에서 다소 특이하다. 이는 다른 유닉스 계열 환경의 대부분의 파일 시스템이 대소문자를 구분하므로 개발자 및 파워 유저에게 몇 가지 문제를 야기한다. 예를 들어, 유닉스 계열 시스템용 소프트웨어의 소스 코드 트리에는 동일한 디렉터리에 Makefile이라는 파일과 makefile이라는 파일이 모두 있을 수 있다. 또한 일부 Mac 설치 프로그램은 대소문자를 구분하지 않는다고 가정하고 대소문자를 구분하는 파일 시스템에서 실패하기도 한다.

구형 MS-DOS 파일 시스템인 FAT12 및 FAT16은 대소문자를 구분하지 않고 대소문자도 보존하지 않았으므로, 이름이 readme.txt 또는 ReadMe.txt로 입력된 파일은 README.TXT로 저장되었다. 이후 Windows 95의 VFAT에서 FAT 파일 시스템은 긴 파일 이름 지원의 확장으로 대소문자를 보존하게 되었다.[10] 이후의 Windows 파일 시스템(예: NTFS)은 내부적으로 대소문자를 구분하며 동일한 디렉터리에 readme.txt와 Readme.txt가 함께 존재할 수 있다. 그러나 실용적인 목적상 파일 이름은 사용자와 대부분의 소프트웨어에 대해 대소문자를 구분하지 않는 방식으로 작동한다.[11] 이는 macOS의 대소문자를 구분하지 않는 파일 시스템과 유사하게 개발자 또는 유닉스 계열 환경에서 제공되는 소프트웨어에 문제를 일으킬 수 있다.

2. 5. 변수 이름

일부 프로그래밍 언어식별자에 대해 대소문자를 구분한다. C, C++, Java, C#, Verilog,[3] 루비,[4] 파이썬, 스위프트 등이 그렇다.

반면, ABAP, 에이다, 대부분의 BASIC (BBC BASIC 제외), Common Lisp, 포트란, SQL (구문 및 일부 공급업체 구현, 예: 마이크로소프트 SQL 서버 데이터 자체),[5] 파스칼, Rexx, ooRexx 등은 대소문자를 구분하지 않는다.

또한, 하스켈, 프롤로그, Go처럼 식별자의 대문자 표기가 의미론적 정보를 나타내는 언어도 있다.

일부 언어는 대소문자 구분 정책이 혼합되어 있기도 하다. 예를 들어 PHP는 변수 이름은 대소문자를 구분하지만 함수 이름은 구분하지 않는다. 따라서 함수를 소문자로 정의했더라도 대문자로 호출할 수 있지만, 변수는 정의된 대소문자 그대로 참조해야 한다. Nim은 대소문자를 구분하지 않으며, 첫 글자가 일치하면 밑줄(_) 문자를 무시하는 특징을 가진다.[6]

2. 6. URL

URL의 ''경로'', ''쿼리'', ''조각'' 및 ''권한'' 섹션은 수신하는 웹 서버에 따라 대소문자를 구분할 수도 있고 구분하지 않을 수도 있다. 그러나 ''스키마'' 및 ''호스트'' 부분은 엄격하게 소문자이다.

3. 프로그래밍 언어

일부 프로그래밍 언어는 식별자에 대해 대소문자를 구분한다. C, C++, Java, C#, Verilog,[3] 루비,[4] 파이썬, 스위프트 등이 여기에 해당한다.

한편, ABAP, 에이다, 대부분의 BASIC (예외는 BBC BASIC), Common Lisp, 포트란, SQL (구문에 대해, 그리고 마이크로소프트 SQL 서버와 같은 일부 공급업체 구현에서는 데이터 자체도 포함)[5], 파스칼, Rexx, ooRexx 와 같은 언어는 대소문자를 구분하지 않는다.

하스켈, 프롤로그, Go와 같이 식별자의 대문자 표기가 의미론에 대한 정보를 인코딩하는 언어도 있다.

다른 일부 프로그래밍 언어는 대소문자 구분이 부분적으로 적용된다. 예를 들어 PHP에서는 변수 이름은 대소문자를 구분하지만 함수 이름은 구분하지 않는다. 즉, 함수가 소문자로 정의되었더라도 대문자로 호출할 수 있지만, 변수가 소문자로 정의된 경우 대문자로 참조할 수 없다. Nim은 대소문자를 구분하지 않으며, 첫 글자가 일치하는 한 밑줄(_)을 무시한다.[6]

4. 텍스트 검색

텍스트 검색 작업은 시스템, 애플리케이션 또는 컨텍스트에 따라 대소문자를 구분하거나 구분하지 않을 수 있다. 사용자는 많은 경우 검색에서 대소문자를 구분할지 여부를 지정할 수 있는데, 예를 들어 대부분의 텍스트 편집기, 워드 프로세서, 웹 브라우저에서 이 기능을 제공한다.

대소문자를 구분하지 않는 검색은 "Language"(문장 시작), "language", "LANGUAGE"(제목 대문자)를 모두 찾을 수 있어 더 포괄적이다. 반면, 대소문자를 구분하는 검색은 컴퓨터 언어 "BASIC"처럼 특정 대소문자로 표기된 단어만 정확히 찾아내고, 원치 않는 다른 형태의 단어는 제외할 수 있다.

예를 들어, 구글 검색 엔진은 기본적으로 대소문자를 구분하지 않으며, 대소문자 구분 검색 옵션은 제공하지 않는다.[7] 오라클Oracle|오라클eng SQL에서는 대부분의 작업과 검색이 기본적으로 대소문자를 구분한다.[8] 반면 다른 대부분의 DBMS에서는 SQL 검색이 기본적으로 대소문자를 구분하지 않는다.[9]

대소문자를 구분하지 않는 작업은 문자 코드 테이블을 접어서(folding) 대문자와 소문자가 일치하도록 만든다는 개념에서 유래하여 때때로 '''대소문자 접기'''라고 부르기도 한다.

참조

[1] 문서
[2] 문서
[3] 서적 The C Programming Language Prentice Hall 1978-02
[4] 서적 Ruby in a nutshell O'Reilly Media 2002-01
[5] 문서
[6] 웹사이트 Nim Manual: Identifier Equality https://nim-lang.git[...] 2019-04-27
[7] 웹사이트 case-sensitive-search - case sensitive google search - Google Project Hosting https://code.google.[...] 2013-05-20
[8] 서적 Oracle SQL Developer User's Guide, Release 1.5 http://docs.oracle.c[...] Oracle Corporation 2013-08
[9] 웹사이트 C.5.5.1 Case Sensitivity in String Searches http://dev.mysql.com[...] MySQL 2013-05-20
[10] 웹사이트 Case Sensitivity in Subsystem for UNIX-based Applications https://technet.micr[...] 2013-05-20
[11] 웹사이트 Filenames are Case Sensitive on NTFS Volumes http://support.micro[...] 2013-05-20
[12] 서적 プログラミング言語C Prentice Hall 1978-02
[13] 서적 Ruby in a nutshell O'Reilly Media 2002-01
[14] 문서
[15] 웹사이트 case-sensitive-search - case sensitive google search - Google Project Hosting https://code.google.[...] 2013-05-20
[16] 서적 Oracle SQL Developer User's Guide, Release 1.5 http://docs.oracle.c[...] Oracle Corporation 2013-08
[17] 웹사이트 MySQL :: MySQL 5.0 Reference Manual :: C.5.5.1 Case Sensitivity in String Searches http://dev.mysql.com[...] 2013-05-20
[18] 웹사이트 Case Sensitivity in Subsystem for UNIX-based Applications https://technet.micr[...] 2005-08-22
[19] 웹사이트 Filenames are Case Sensitive on NTFS Volumes http://support.micro[...] 2006-11-01
[20] 웹인용 case-sensitive-search - case sensitive google search - Google Project Hosting https://code.google.[...] 2013-05-20
[21] 서적 Oracle SQL Developer User's Guide, Release 1.5 http://docs.oracle.c[...] Oracle Corporation 2013-08
[22] 웹인용 C.5.5.1 Case Sensitivity in String Searches http://dev.mysql.com[...] MySQL 2013-05-20



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com